home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / TURBOSYS.MOD < prev    next >
Text File  |  2000-09-26  |  7KB  |  391 lines

  1. (*$S-, $R-, $A-, $T- *)
  2. IMPLEMENTATION MODULE TurboSys;
  3.  
  4. FROM SYSTEM  IMPORT ADR,ADDRESS,OFS,SEG,ASSEMBLER;
  5. FROM System  IMPORT AX,BX,CX,DX,ES,DI,DS,SI,BP,Trap,XTrap,GetVector,Terminate;
  6. FROM Strings IMPORT Assign;
  7. FROM Storage IMPORT ALLOCATE,DEALLOCATE;
  8. FROM Loader  IMPORT Execute;
  9. FROM InOut   IMPORT WriteString,WriteLn;
  10. FROM Break   IMPORT InstallBreakHandler,UninstallBreakHandler,EnableBreak;
  11.  
  12. PROCEDURE WriteText(a,x,y : CARDINAL;
  13.                     text  : STRING);
  14. BEGIN
  15.  AX := 00000H;
  16.  BX := a;
  17.  CX := x;
  18.  DX := y;
  19.  ES := text.SEG;
  20.  DI := text.OFS;
  21.  XTrap(interruptVector);
  22. END WriteText;
  23.  
  24. PROCEDURE Fill(attribut,
  25.                x,y,w,h,
  26.                zeichen   : CARDINAL);
  27. BEGIN
  28.  AX := 00001H;
  29.  BX := attribut;
  30.  CX := x;
  31.  DX := y;
  32.  DS := w;
  33.  SI := h;
  34.  DI := zeichen;
  35.  XTrap(interruptVector);
  36. END Fill;
  37.  
  38. PROCEDURE SetCursor(x,y : CARDINAL);
  39. BEGIN
  40.  AX := 0002H;
  41.  BX := x;
  42.  CX := y;
  43.  Trap(interruptVector);
  44. END SetCursor;
  45.  
  46. PROCEDURE RestoreCursor;
  47. BEGIN
  48.  AX := 0003H;
  49.  Trap(interruptVector);
  50. END RestoreCursor;
  51.  
  52. PROCEDURE CopyVideo2Buffer(buffer  : ADDRESS;
  53.                            x,y,w,h : CARDINAL);
  54. BEGIN
  55.  AX := 0004H;
  56.  BX := x;
  57.  CX := y;
  58.  DX := w;
  59.  DS := h;
  60.  ES := buffer.SEG;
  61.  DI := buffer.OFS;
  62.  XTrap(interruptVector);
  63. END CopyVideo2Buffer;
  64.  
  65. PROCEDURE CopyBuffer2Video(buffer  : ADDRESS;
  66.                            x,y,w,h : CARDINAL);
  67. BEGIN
  68.  AX := 0005H;
  69.  BX := x;
  70.  CX := y;
  71.  DX := w;
  72.  DS := h;
  73.  ES := buffer.SEG;
  74.  DI := buffer.OFS;
  75.  XTrap(interruptVector);
  76. END CopyBuffer2Video;
  77.  
  78. PROCEDURE MouseReset;
  79. BEGIN
  80.  AX := 00100H;
  81.  Trap(interruptVector);
  82. END MouseReset;
  83.  
  84. PROCEDURE MouseOn;
  85. BEGIN
  86.  AX := 00101H;
  87.  Trap(interruptVector);
  88. END MouseOn;
  89.  
  90. PROCEDURE MouseOff;
  91. BEGIN
  92.  AX := 00102H;
  93.  Trap(interruptVector);
  94. END MouseOff;
  95.  
  96. PROCEDURE GetMousePosition(VAR x,y : CARDINAL;
  97.                            VAR b   : MouseButtonSet);
  98. BEGIN
  99.  AX := 00103H;
  100.  Trap(interruptVector);
  101.  x := tdos^.mouseX;
  102.  y := tdos^.mouseY;
  103.  b := tdos^.mouseButtons;
  104. END GetMousePosition;
  105.  
  106. PROCEDURE OpenScreen;
  107. BEGIN
  108.  AX := 00200H;
  109.  Trap(interruptVector);
  110. END OpenScreen;
  111.  
  112. PROCEDURE CloseScreen;
  113. BEGIN
  114.  AX := 00201H;
  115.  Trap(interruptVector);
  116. END CloseScreen;
  117.  
  118. PROCEDURE OpenWindow(titel   : ARRAY OF CHAR;
  119.                      x,y,w,h : CARDINAL;
  120.                      flgs    : WindowFlagSet;
  121.                      mw,mh   : CARDINAL) : WindowPtr;
  122. VAR win : WindowPtr;
  123. BEGIN
  124.  ALLOCATE(win,SIZE(Window));
  125.  IF (win=NIL) THEN
  126.   Terminate(0);
  127.  END (* IF *);
  128.  WITH win^ DO
  129.   leftEdge := x;
  130.   topEdge  := y;
  131.   width    := w;
  132.   height   := h;
  133.   flags    := flgs;
  134.   IF (windowSizing IN flgs) THEN
  135.    bufferSize := tdos^.videoSize;
  136.   ELSE
  137.    bufferSize := w*h*2;
  138.   END (* IF *);
  139.   Assign(titel,win^.title);
  140.   ALLOCATE(buffer,bufferSize);
  141.   IF (buffer=NIL) THEN
  142.    Terminate(0);
  143.   END (* IF *);
  144.   minWidth  := mw;
  145.   minHeight := mh;
  146.  END (* WITH *);
  147.  AX := 0202H;
  148.  ES := win.SEG;
  149.  DI := win.OFS;
  150.  XTrap(interruptVector);
  151.  RETURN(win);
  152. END OpenWindow;
  153.  
  154. PROCEDURE SetAPen(farbe : CARDINAL);
  155. BEGIN
  156.  AX := 0203H;
  157.  BX := farbe;
  158.  Trap(interruptVector);
  159. END SetAPen;
  160.  
  161. PROCEDURE SetBPen(farbe : CARDINAL);
  162. BEGIN
  163.  AX := 0204H;
  164.  BX := farbe;
  165.  Trap(interruptVector);
  166. END SetBPen;
  167.  
  168. PROCEDURE Move(x,y : CARDINAL);
  169. BEGIN
  170.  AX := 0205H;
  171.  BX := x;
  172.  CX := y;
  173.  Trap(interruptVector);
  174. END Move;
  175.  
  176. PROCEDURE Text(text : ARRAY OF CHAR);
  177. VAR adr : ADDRESS;
  178. BEGIN
  179.  adr := ADR(text);
  180.  AX := 0206H;
  181.  ES := adr.SEG;
  182.  DI := adr.OFS;
  183.  XTrap(interruptVector);
  184. END Text;
  185.  
  186. PROCEDURE ShowMenu(menu : MenuPtr);
  187. BEGIN
  188.  AX := 0207H;
  189.  ES := menu.SEG;
  190.  DI := menu.OFS;
  191.  XTrap(interruptVector);
  192. END ShowMenu;
  193.  
  194. PROCEDURE SystemManager;
  195. BEGIN
  196.  AX := 02FFH;
  197.  Trap(interruptVector);
  198. END SystemManager;
  199.  
  200. PROCEDURE ShowHelp(t1,t2 : ARRAY OF CHAR);
  201. VAR a1,a2 : ADDRESS;
  202. BEGIN
  203.  a1 := ADR(t1);
  204.  a2 := ADR(t2);
  205.  AX := 0208H;
  206.  ES := a1.SEG;
  207.  DI := a1.OFS;
  208.  BX := a2.SEG;
  209.  CX := a2.OFS;
  210.  XTrap(interruptVector);
  211. END ShowHelp;
  212.  
  213. PROCEDURE ShowGadget(gad : GadgetPtr);
  214. BEGIN
  215.  AX := 0209H;
  216.  ES := gad.SEG;
  217.  DI := gad.OFS;
  218.  XTrap(interruptVector);
  219. END ShowGadget;
  220.  
  221. PROCEDURE MoveWindow(x,y : CARDINAL);
  222. BEGIN
  223.  AX := 020AH;
  224.  BX := x;
  225.  CX := y;
  226.  Trap(interruptVector);
  227. END MoveWindow;
  228.  
  229. PROCEDURE SizeWindow(w,h : CARDINAL);
  230. BEGIN
  231.  AX := 020BH;
  232.  BX := w;
  233.  CX := h;
  234.  Trap(interruptVector);
  235. END SizeWindow;
  236.  
  237. PROCEDURE CloseWindow;
  238. VAR win : WindowPtr;
  239. BEGIN
  240.  win := tdos^.firstWindow;
  241.  IF (win # NIL) THEN
  242.   AX := 020CH;
  243.   Trap(interruptVector);
  244.   DEALLOCATE(win^.buffer,win^.bufferSize);
  245.   DEALLOCATE(win,SIZE(Window));
  246.  END (* IF *);
  247. END CloseWindow;
  248.  
  249. PROCEDURE CenterText(y    : CARDINAL;
  250.                      text : ARRAY OF CHAR);
  251. VAR adr : ADDRESS;
  252. BEGIN
  253.  Assign(text,tdos^.help);
  254.  adr := ADR(tdos^.help);
  255.  AX := 020DH;
  256.  BX := y;
  257.  ES := adr.SEG;
  258.  DI := adr.OFS;
  259.  XTrap(interruptVector);
  260. END CenterText;
  261.  
  262. PROCEDURE DrawX(farbe,x,y,l,zeichen : CARDINAL);
  263. BEGIN
  264.  AX := 0006H;
  265.  BX := farbe;
  266.  CX := x;
  267.  DX := y;
  268.  DS := l;
  269.  SI := zeichen;
  270.  XTrap(interruptVector);
  271. END DrawX;
  272.  
  273. PROCEDURE DrawY(farbe,x,y,l,zeichen : CARDINAL);
  274. BEGIN
  275.  AX := 0007H;
  276.  BX := farbe;
  277.  CX := x;
  278.  DX := y;
  279.  DS := l;
  280.  SI := zeichen;
  281.  XTrap(interruptVector);
  282. END DrawY;
  283.  
  284. PROCEDURE ModifyProp(gad     : GadgetPtr;
  285.                      pos,max : CARDINAL);
  286. BEGIN
  287.  AX := 020FH;
  288.  BX := pos;
  289.  CX := max;
  290.  ES := gad.SEG;
  291.  DI := gad.OFS;
  292.  XTrap(interruptVector);
  293. END ModifyProp;
  294.  
  295. PROCEDURE LineH(x,y,l : CARDINAL);
  296. BEGIN
  297.  AX := 0210H;
  298.  BX := x;
  299.  CX := y;
  300.  DX := l;
  301.  Trap(interruptVector);
  302. END LineH;
  303.  
  304. PROCEDURE LineV(x,y,l : CARDINAL);
  305. BEGIN
  306.  AX := 0211H;
  307.  BX := x;
  308.  CX := y;
  309.  DX := l;
  310.  Trap(interruptVector);
  311. END LineV;
  312.  
  313. PROCEDURE Char(x,y,zeichen : CARDINAL);
  314. BEGIN
  315.  AX := 0212H;
  316.  BX := x;
  317.  CX := y;
  318.  DX := zeichen;
  319.  Trap(interruptVector);
  320. END LineH;
  321.  
  322. PROCEDURE Box(x,y,w,h : CARDINAL);
  323. BEGIN
  324.  AX := 0213H;
  325.  BX := x;
  326.  CX := y;
  327.  DX := w;
  328.  ES := h;
  329.  XTrap(interruptVector);
  330. END LineH;
  331.  
  332. PROCEDURE ExecuteApplication(name : ARRAY OF CHAR;
  333.                              args : ARRAY OF CHAR;
  334.                              dos  : BOOLEAN) : CARDINAL;
  335. VAR win  : WindowPtr;
  336.     cp,a : CARDINAL;
  337. BEGIN
  338.  IF (dos=TRUE) THEN
  339.   AX := 0300H;
  340.   Trap(interruptVector);
  341.  END (* IF *);
  342.  
  343.  win := tdos^.firstWindow;
  344.  cp  := tdos^.cursorPos;
  345.  
  346.  tdos^.firstWindow := NIL;
  347.  tdos^.cursorPos  := 05050H;
  348.  Execute(name,args,a);
  349.  tdos^.firstWindow := win;
  350.  tdos^.cursorPos   := cp;
  351.  
  352.  IF (dos=TRUE) THEN
  353.   WriteLn;
  354.   WriteString("Drücken Sie eine beliebige Taste, um zu TurboDOS zurückzukehren.");
  355.   AX := 0;
  356.   Trap(016H);
  357.   AX := 0301H;
  358.   Trap(interruptVector);
  359.  END (* IF *);
  360.  RestoreCursor;
  361.  RETURN(a);
  362. END ExecuteApplication;
  363.  
  364. PROCEDURE CheckTDOS;
  365. VAR seg,ofs,ok : CARDINAL;
  366. BEGIN
  367.  seg := tdos.SEG;
  368.  ofs := tdos.OFS;
  369.  ok  := 0;
  370.  ASM
  371.   MOV ES,seg
  372.   MOV DI,ofs
  373.   MOV AL,ES:[DI]
  374.   MOV BL,ES:[DI+1]
  375.   MOV CL,ES:[DI+2]
  376.   MOV DL,ES:[DI+3]
  377.   CMP AL,"T"
  378.   JNE Nein
  379.   MOV ok,1
  380.  Nein:
  381.  END;
  382.  IF (ok=0) THEN tdos := NIL; END;
  383. END CheckTDOS;
  384.  
  385. BEGIN
  386.  GetVector(memoryVector,tdos);
  387.  CheckTDOS;
  388.  
  389. END TurboSys.
  390.  
  391.